package excelIO;

import java.io.FileOutputStream;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

/*
 * Working with xls-Files requires just poi*.jar
 * Working with xlsx-Files requires additionaly the following
 * libs:  poi-ooxml*.jar, poi-ooxml-schemas*.jar, xmlbeans*.jar, dom4j*.jar
 */
public class WriteXLS {

    public static void main(String[] args) {
        /**Name of excel file that we are going to create**/
        String fileName = "c:\\800_fix\\400_JavaDev\\tmp\\testPOIWrite.xls";
        String fileName2 = "c:\\800_fix\\400_JavaDev\\tmp\\testPOIWrite.xlsx";

        writeDataToExcelFile(fileName);
    }

    /** This method writes data to new excel file **/
    private static void writeDataToExcelFile(String fileName) {
        Workbook myWorkBook;
        String[][] excelData = preapreDataToWriteToExcel();

        if (fileName.endsWith("xls")) {

            System.out.println("xls");
            myWorkBook = new HSSFWorkbook();
        } else {

            System.out.println("xlsx");
            myWorkBook = new XSSFWorkbook();
        }
        Sheet mySheet;
        mySheet = myWorkBook.createSheet();
        Row myRow;
        Cell myCell;
        for (int rowNum = 0;
                rowNum < excelData[0].length; rowNum++) {
            myRow = mySheet.createRow(rowNum);

            for (int cellNum = 0; cellNum < 4; cellNum++) {
                myCell = myRow.createCell(cellNum);
                myCell.setCellValue(excelData[rowNum][cellNum]);
            }
        }
        try {
            FileOutputStream out = new FileOutputStream(fileName);
            myWorkBook.write(out);
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    /**Prepare some demo data as excel file content**/
    public static String[][] preapreDataToWriteToExcel() {
        String[][] excelData = new String[4][4];
        excelData[0][0] = "First Name";
        excelData[0][1] = "Last Name";
        excelData[0][2] = "Telephone";
        excelData[0][3] = "Address";
        excelData[1][0] = "Kushal";
        excelData[1][1] = "Paudyal";
        excelData[1][2] = "000-000-0000";
        excelData[1][3] = "IL,USA";
        excelData[2][0] = "Randy";
        excelData[2][1] = "Ram Robinson";
        excelData[2][2] = "111-111-1111";
        excelData[2][3] = "TX, USA";
        excelData[3][0] = "Phil";
        excelData[3][1] = "Collins";
        excelData[3][2] = "222-222-2222";
        excelData[3][3] = "NY, USA";
        return excelData;
    }
}
